// 成本统计核算
// 人工成本 - 根据正常员工考勤数据核算投入工时 * 成员的人工成本天数(8小时/天/金额) 进行核算投入成本
// pro 项目基本信息
// hours 考勤记录
// member 成员列表
import moment from 'moment';

const sumH = (pro, member, hours) => {
  // 过滤成员
  let lmeb = [];
  // 无参与时间 Del
  member.map(meb => {
    if (meb.joinTime !== null) {
      // 无离开时间 AddTime
      if (meb.quitTime === null) {
        lmeb.push({
          userName: meb.userName,
          userId: meb.userId,
          jobs: meb.jobs,
          role: meb.role,
          cost: meb.cost,
          joinTime: moment(meb.joinTime).format('YYYY-MM-DD'),
          quitTime: moment(pro.cycleEnd).format('YYYY-MM-DD')
        });
      } else { // 有参与、离开时间 Push
        lmeb.push({
          userName: meb.userName,
          userId: meb.userId,
          jobs: meb.jobs,
          role: meb.role,
          cost: meb.cost,
          joinTime: moment(meb.joinTime).format('YYYY-MM-DD'),
          quitTime: moment(meb.quitTime).format('YYYY-MM-DD')
        });
      }
    }
  });
  // console.log(lmeb);

  // 二次过滤 平铺日期与人工成本标准
  let ltmeb = [];
  for (let i = lmeb.length; i--;) {
    let diff = getDay(lmeb[i].joinTime, lmeb[i].quitTime);
    diff.map(day => {
      ltmeb.push({
        userName: lmeb[i].userName,
        userId: lmeb[i].userId,
        jobs: lmeb[i].jobs,
        role: lmeb[i].role,
        cost: lmeb[i].cost,
        day: day,
        hour: 0
      });
    });
  };
  // console.log(ltmeb);

  // 三次过滤 投入工时-关联工时数据 匹配过滤
  ltmeb.map(tmeb => {
    hours.map(h => {
      // 匹配工号
      if (h.userId === tmeb.userId) {
        // 匹配日期
        if (moment(h.logTime).format('YYYY-MM-DD') === moment(tmeb.day).format('YYYY-MM-DD')) {
          // 推入当前日期投入工时数
          tmeb.hour = h.hours;
        }
      }
    });
  });
  // console.log(ltmeb);

  // 合计人工投入成本
  let sumH = 0;
  ltmeb.map(tmeb => {
    sumH += (tmeb.cost / 8) * tmeb.hour;
  });
  // 根据有效成员核算成员投入工时成本
  return sumH;
};

// 列出所有日期
const getDay = (start, end) => {
  let arr = [];
  start = moment(start).format('YYYY-MM-DD');
  end = moment(end).add(1, 'days').format('YYYY-MM-DD');
  while (moment(start).isBefore(end)) {
    arr.push(start);
    start = moment(start).add(1, 'days').format('YYYY-MM-DD');
  }
  return arr;
};

export default sumH;
